先前範例當中使用 fmt package ,這個章節獨立介紹 fmt 如何使用
在官方介紹當中說明了 fmt package 實現了格式化 I/O 方法
類似於 C 語言 prtinf 和 scanf 方法
使用上更簡單
%v the value in a default format when printing structs, the plus flag (%+v) adds field names
%#v a Go-syntax representation of the value
%T a Go-syntax representation of the type of the value
%% a literal percent sign; consumes no value
藉由官方文檔的解釋,我們來用程式碼了解
package main
import (
"fmt"
)
func main() {
var n = 100
fmt.Printf("%v\n", n) //值的默認格式
fmt.Printf("%#v\n", n) //該值在 Go 表示
fmt.Printf("%T\n", n) //使用%T 可以查看類型
fmt.Printf("%%+v %+v\n", n) //%%輸出 % 字串
}
example
將 boolean 轉換成字串方式顯示出來
%t the word true or false
package main
import (
"fmt"
)
func main() {
var a bool
fmt.Printf("%t", a) //轉換字串的 true 或 false
}
%b base 2
%c the character represented by the corresponding Unicode code point
%d base 10
%o base 8
%O base 8 with 0o prefix
%q a single-quoted character literal safely escaped with Go syntax.
%x base 16, with lower-case letters for a-f
%X base 16, with upper-case letters for A-F
%U Unicode format: U+1234; same as "U+%04X"
package main
import (
"fmt"
)
func main() {
var a = 100
fmt.Printf("%b\n", a) //轉換二進制
fmt.Printf("%c\n", a) //轉換至 Unicode 字符 100 對應 ascii 為 d
fmt.Printf("%d\n", a) //轉換十進制
fmt.Printf("%o\n", a) //轉換八進制
fmt.Printf("%O\n", a) //轉換八進制用0o表示
fmt.Printf("%q\n", a) //轉換Unicode 字符並以單引號方式表示
fmt.Printf("%x\n", a) //轉換16進制 用小寫 a-f 表示
fmt.Printf("%X\n", a) //轉換16進制 用小寫 A-F 表示
fmt.Printf("%U\n", a) //轉成 Unicode 格式
}
%b decimalless scientific notation with exponent a power of two,
in the manner of strconv.FormatFloat with the 'b' format,
e.g. -123456p-78
%e scientific notation, e.g. -1.234456e+78
%E scientific notation, e.g. -1.234456E+78
%f decimal point but no exponent, e.g. 123.456
%F synonym for %f
%g %e for large exponents, %f otherwise. Precision is discussed below.
%G %E for large exponents, %F otherwise
%x hexadecimal notation (with decimal power of two exponent), e.g. -0x1.23abcp+20
%X upper-case hexadecimal notation, e.g. -0X1.23ABCP+20
package main
import (
"fmt"
)
func main() {
f := 12.34
fmt.Printf("%b\n", f) //無小數部分,二進制指數的科學記號
fmt.Printf("%e\n", f) //使用e科學記號
fmt.Printf("%E\n", f) //使用E科學記號
fmt.Printf("%f\n", f) //有小數,但無指數部分
fmt.Printf("%F\n", f) //如%f
fmt.Printf("%g\n", f) //更據實際情況採用 %e 或 %f 格式
fmt.Printf("%G\n", f) //更據實際情況採用 %E 或 %F 格式
}
package main
import (
"fmt"
)
func main() {
var a = "t"
fmt.Printf("%s\n", a)//輸出字串
fmt.Printf("%q\n", a) //使用雙引號進行表達
fmt.Printf("%x\n", a) //每個字符用兩個byte 16進制表達 (a-z)
fmt.Printf("%X\n", a) //每個字符用兩個byte 16進制表達 (A-Z)
}
%f default width, default precision
%9f width 9, default precision
%.2f default width, precision 2
%9.2f width 9, precision 2
%9.f width 9, precision 0
package main
import (
"fmt"
)
func main() {
f := 12.34
fmt.Printf("%f\n", f) //默認精度
fmt.Printf("%9f\n", f) //寬度9,默認精度
fmt.Printf("%.2f\n", f) //默認寬度,精度2
fmt.Printf("%9.2f\n", f) //寬度9,精度2
fmt.Printf("%9.f\n", f) //寬度9,精度0
}